Matthias Clasen [Wed, 29 May 2019 01:42:38 +0000 (21:42 -0400)]
treeview: Make final
Make GtkTreeSelection final as well.
Matthias Clasen [Wed, 29 May 2019 00:01:03 +0000 (20:01 -0400)]
flow box: Make final
We keep GtkFlowBoxChild subclassable, though.
Matthias Clasen [Wed, 29 May 2019 00:00:40 +0000 (20:00 -0400)]
listbox Make final
We keep GtkListBoxRow subclassable, though.
Matthias Clasen [Tue, 28 May 2019 23:53:56 +0000 (23:53 +0000)]
notebook: Make final
Matthias Clasen [Tue, 28 May 2019 23:45:45 +0000 (19:45 -0400)]
label: Make final
Matthias Clasen [Tue, 28 May 2019 23:43:43 +0000 (19:43 -0400)]
menubar: Make final
Matthias Clasen [Tue, 28 May 2019 23:37:51 +0000 (23:37 +0000)]
toolbar: make final
Matthias Clasen [Tue, 28 May 2019 23:37:31 +0000 (23:37 +0000)]
menu: Make final
Matthias Clasen [Tue, 28 May 2019 23:30:02 +0000 (23:30 +0000)]
Forgotten file
Matthias Clasen [Tue, 28 May 2019 22:58:58 +0000 (18:58 -0400)]
menu tool button: Make final
Matthias Clasen [Tue, 28 May 2019 22:58:46 +0000 (18:58 -0400)]
radio tool button: Make final
Matthias Clasen [Tue, 28 May 2019 22:58:31 +0000 (18:58 -0400)]
toggle tool button: Use standard padding
Matthias Clasen [Tue, 28 May 2019 22:58:05 +0000 (18:58 -0400)]
tool button: Use standard padding
Matthias Clasen [Tue, 28 May 2019 22:50:08 +0000 (22:50 +0000)]
iconview: Make final
Matthias Clasen [Tue, 28 May 2019 22:35:07 +0000 (22:35 +0000)]
stack: Make final
Matthias Clasen [Tue, 28 May 2019 22:12:20 +0000 (22:12 +0000)]
file chooser error stack: Don't derive from stack
We can just have a GtkStack, instead.
Matthias Clasen [Tue, 28 May 2019 21:04:32 +0000 (17:04 -0400)]
scrolled window: Make final
Matthias Clasen [Tue, 28 May 2019 22:34:47 +0000 (22:34 +0000)]
inspector: Stop deriving from scrolled window
Matthias Clasen [Tue, 28 May 2019 22:11:14 +0000 (22:11 +0000)]
places sidebar: Don't derive from scrolled window
We can just have a scrolled window, instead.
Matthias Clasen [Tue, 28 May 2019 22:16:59 +0000 (22:16 +0000)]
Forgotten file
Matthias Clasen [Tue, 28 May 2019 20:46:07 +0000 (20:46 +0000)]
Merge branch 'wip/matthiasc/popup5' into 'master'
Reimplement popups
See merge request GNOME/gtk!847
Matthias Clasen [Tue, 28 May 2019 19:43:01 +0000 (19:43 +0000)]
inspector: Show surface and renderer
Руслан Ижбулатов [Tue, 28 May 2019 17:25:45 +0000 (17:25 +0000)]
GDK W32: Fix indentation and placate GCC
Руслан Ижбулатов [Tue, 28 May 2019 17:21:42 +0000 (17:21 +0000)]
GDK W32: Correctly log popups
Руслан Ижбулатов [Tue, 28 May 2019 16:39:58 +0000 (16:39 +0000)]
GDK W32: Only use owner windows for popups
GTK4 doesn't have WS_CHILD windows anymore, so hWndParent argument
to CreateWindowEx() is always interpreted as the owner window,
not the parent window.
A window with an owner:
* is above the owner in Z-order
* is destroyed when the owner is destroyed
* is hidden when the owner is minimized
This is enforced by the OS.
GTK can only allow this for popup windows.
Desktop window must never[0] be an owner.
[0]: https://devblogs.microsoft.com/oldnewthing/
20040224-00/?p=40493
Руслан Ижбулатов [Tue, 28 May 2019 16:37:28 +0000 (16:37 +0000)]
GDK W32: No more child windows
We don't have child windows (the window-inside-a-window kind of windows)
anymore. Remove all the code related to that.
Руслан Ижбулатов [Tue, 28 May 2019 16:14:39 +0000 (16:14 +0000)]
Don't assume that gdk_surface[_move]_resize() is asynchronous
On Windows that call resizes the native window immediately,
and the corresponding GDK event is emitted and processed
before the control is returned to gtk_window_move_resize().
Therefore, update freeze and configure_request_count increment
must happen before the call, not after it.
Руслан Ижбулатов [Tue, 28 May 2019 00:35:30 +0000 (00:35 +0000)]
Add missing include
Руслан Ижбулатов [Mon, 27 May 2019 23:51:38 +0000 (23:51 +0000)]
GDK W32: Don't handle WM_ACTIVATE for popup windows
Popups can't be active or inactive, so emitting GDK events
in response to WM_ACTIVATE makes no sense for these kinds
of GDK surfaces.
The jury is still out on whether we should block (return 0)
or ignore (don't return anything) this message.
Blocking WM_NCACTIVATE (which we currently ignore) is definitely
not an option - it completely breaks input somehow.
Matthias Clasen [Mon, 27 May 2019 16:26:19 +0000 (16:26 +0000)]
Avoid compiler warnings
Avoid priv being flagged as unused on win32.
Руслан Ижбулатов [Sun, 26 May 2019 15:36:03 +0000 (15:36 +0000)]
GDK W32: Adjust to new popup surfaces
1) Handle GDK_SURFACE_POPUP in RegisterGdkClass()
(for now pretend it's the same as GDK_SURFACE_TOPLEVEL)
2) Remove useless code from GDK_SURFACE_TOPLEVEL case in _gdk_win32_display_create_surface()
(now there's just GDK_SURFACE_TOPLEVEL there, no need for a type check)
3) Have a separate case for GDK_SURFACE_POPUP and ensure that
it doesn't get WS_CHILDWINDOW (and neither should GDK_SURFACE_TEMP).
Matthias Clasen [Sun, 26 May 2019 03:55:08 +0000 (03:55 +0000)]
surface: Cosmetics
Move things where they belong.
Matthias Clasen [Sat, 25 May 2019 23:11:30 +0000 (23:11 +0000)]
popover: Don't constantly redraw the beak
We don't want to constantly draw the arrow
if we don't have to. Save the render node
to achieve this.
Matthias Clasen [Fri, 24 May 2019 10:59:38 +0000 (10:59 +0000)]
wayland: Disconnect the frame clock
The frame clock can survive the surface now,
so we need to disconnect.
Matthias Clasen [Fri, 24 May 2019 10:55:06 +0000 (10:55 +0000)]
win32: Disconnect the frame clock
The frame clock can now survive the surface,
so we need to disconnect when the surface goes away.
Matthias Clasen [Fri, 24 May 2019 01:55:57 +0000 (01:55 +0000)]
x11: Disconnect from the frame clock
The frame clock can now survive its surface,
so we need to disconnect signal handlers.
Matthias Clasen [Fri, 24 May 2019 01:55:23 +0000 (01:55 +0000)]
broadway: Disconnect from the frame clock
The frame clock can no survive its surface,
so we need to disconnect signal handlers.
Matthias Clasen [Fri, 24 May 2019 01:56:35 +0000 (01:56 +0000)]
surface: Give backends a chance to disconnect
Call the destroy vfunc before clearing
frame clock and gl context, so backends
have a chance to clean up.
Matthias Clasen [Fri, 24 May 2019 01:54:55 +0000 (01:54 +0000)]
fishbowl: Don't pop up popovers too early
Wayland does not like this.
Matthias Clasen [Thu, 23 May 2019 00:18:12 +0000 (00:18 +0000)]
popover: Stop needles allocations
We were queuing an allocation whenever
the popover is flipped over, unnecessarily,
since we don't change the size of the surface.
This was showing up as popovers being invisible
when flipped over, under X.
Matthias Clasen [Wed, 22 May 2019 23:47:59 +0000 (23:47 +0000)]
surface: Fix the fallback move-to-rect implementation
On X11, the final and flipped rects were reporting
global coordinates. This was showing up as misplaced
popover beaks.
Matthias Clasen [Wed, 22 May 2019 22:40:27 +0000 (22:40 +0000)]
win32: Set surface type early enough
We need to set the surface type before
the frame clock.
Matthias Clasen [Wed, 22 May 2019 20:58:24 +0000 (20:58 +0000)]
surface: Make only toplevels control events
There is no need for popups to connect to the frame
clock to pause and unpause events on the display -
the toplevel already does it.
And don't connect to paint either - handle paint
on popups recursively.
Matthias Clasen [Wed, 22 May 2019 22:04:45 +0000 (22:04 +0000)]
gdk: Maintain popup tree in the frontend
We will need this information here, and we can
share the child lists between various backends.
Matthias Clasen [Wed, 22 May 2019 22:35:09 +0000 (22:35 +0000)]
surface: Make surface-type a property
Make surface-type a construct-only property,
so we can set it before the frame clock.
Matthias Clasen [Wed, 22 May 2019 00:45:08 +0000 (20:45 -0400)]
Adwaita: Remove Emoji completion special case
We can use GtkPopover::has-arrow now.
Matthias Clasen [Wed, 22 May 2019 00:43:04 +0000 (00:43 +0000)]
inspector: Avoid a critical warning
Matthias Clasen [Wed, 22 May 2019 00:42:07 +0000 (00:42 +0000)]
popover: Make it possible to not have an arrow
This will make popovers move flexible for other
uses, such as the Emoji completion popup.
Matthias Clasen [Wed, 22 May 2019 00:00:44 +0000 (00:00 +0000)]
popover: Set input shapes on wayland too
No reason not to do it. Wayland has input shapes.
Matthias Clasen [Tue, 21 May 2019 23:41:00 +0000 (23:41 +0000)]
win32: Set the surface type
This is copying some code from the corresponding
create_surface implementations of the other backends.
Руслан Ижбулатов [Tue, 21 May 2019 21:29:38 +0000 (21:29 +0000)]
IME IM: Be able to handle NULL widget correctly
Руслан Ижбулатов [Tue, 21 May 2019 21:20:15 +0000 (21:20 +0000)]
GDK W32: Fix the code to compile
Somewhat change the order of initialization (to be closer
to what Wayland backend does).
Also remove the wrapper field that is no longer needed -
it used to hold a pointer to the main GdkWindow instance,
which wrapped GdkWin32ImplWindow. Since impls are gone,
nothing is wrapping anything anymore.
Fix a substitution error, where wrong pointer was added
to the hash table. Added a comment to ensure that future readers
(including myself) won't be confused by the fact that we're
inserting a pointer instead of the handle itself.
Руслан Ижбулатов [Tue, 21 May 2019 21:17:54 +0000 (21:17 +0000)]
GDK W32: be able to handle NULL cursor
Matthias Clasen [Mon, 20 May 2019 13:19:12 +0000 (13:19 +0000)]
surface: Don't dispose the frame clock prematurely
Since we are now sharing frame clocks with multiple
surfaces, we can no longer dispose them unconditionally
when a surface goes away. Only do it if we are a
toplevel (without parent).
This was showing up as criticals on exit when opening
and closing any popover in widget factory.
Matthias Clasen [Mon, 20 May 2019 12:17:12 +0000 (12:17 +0000)]
tooltip: fix critical warnings
We might trigger a requery while unrooted.
Deal with it.
Matthias Clasen [Mon, 20 May 2019 04:52:22 +0000 (04:52 +0000)]
Mention gtk_widget_get_toplevel in the migration guide.
Matthias Clasen [Mon, 20 May 2019 04:51:31 +0000 (04:51 +0000)]
Drop gtk_widget_get_toplevel
Not used anymore.
Matthias Clasen [Mon, 20 May 2019 04:47:50 +0000 (04:47 +0000)]
Stop using gtk_widget_get_toplevel
All uses of it can be replaced by gtk_widget_get_root.
Matthias Clasen [Mon, 20 May 2019 04:11:25 +0000 (04:11 +0000)]
Cosmetics
Matthias Clasen [Mon, 20 May 2019 03:54:59 +0000 (03:54 +0000)]
Mention gtk_widget_is_toplevel in the migration guide
Matthias Clasen [Mon, 20 May 2019 03:53:43 +0000 (03:53 +0000)]
Drop gtk_widget_is_toplevel
No longer used.
Matthias Clasen [Mon, 20 May 2019 03:31:03 +0000 (03:31 +0000)]
Stop using gtk_widget_is_toplevel
Matthias Clasen [Mon, 20 May 2019 03:22:28 +0000 (03:22 +0000)]
Mention gtk_widget_get_surface in the migration guide
Matthias Clasen [Mon, 20 May 2019 03:20:40 +0000 (03:20 +0000)]
Drop gtk_widget_get_surface
It is no longer used.
Matthias Clasen [Mon, 20 May 2019 00:38:08 +0000 (00:38 +0000)]
Stop using gtk_widget_get_surface
Replace all uses of gtk_widget_get_surface by
gtk_native_get_surface.
Matthias Clasen [Mon, 20 May 2019 00:03:30 +0000 (00:03 +0000)]
Mention modal->autohide rename in migration guide
Matthias Clasen [Mon, 20 May 2019 00:01:05 +0000 (00:01 +0000)]
Add a test for the property renaming
Matthias Clasen [Sun, 19 May 2019 23:53:15 +0000 (23:53 +0000)]
builder tool: Handle modal->autohide rename
Add a facility for renamed properties,
and use it for GtkPopover::modal.
Matthias Clasen [Sun, 19 May 2019 23:46:56 +0000 (19:46 -0400)]
popover: Rename modal to autohide
This is the term we use for the surface,
and it matches the behavior a bit better
than modal.
Update all callers.
Matthias Clasen [Sun, 19 May 2019 03:09:05 +0000 (03:09 +0000)]
win32: Build fixes
Matthias Clasen [Sat, 18 May 2019 15:27:43 +0000 (15:27 +0000)]
testsuite: Fix some a11y output
This was affected by a recent fix to GtkAboutDialog.
Matthias Clasen [Sat, 18 May 2019 14:22:29 +0000 (14:22 +0000)]
testsuite: Fix popover-related failures
Matthias Clasen [Sat, 18 May 2019 13:39:12 +0000 (13:39 +0000)]
window: Make unrealize work again
GtkWidgets unrealize accesses the frame clock
of the surface, so we need to keep the surface
in place until after we've chained up.
Matthias Clasen [Fri, 17 May 2019 21:34:20 +0000 (21:34 +0000)]
Drop gtk_widget_set_surface
Not used anymore. Only GtkNative's have surfaces.
Matthias Clasen [Fri, 17 May 2019 21:32:16 +0000 (21:32 +0000)]
Drop GtkWidget::surface
Unneeded.
Matthias Clasen [Fri, 17 May 2019 21:25:36 +0000 (21:25 +0000)]
Work toward dropping widget->surface
Drop special-casing of GtkNative in
most widget vfuncs. GtkNative implementations
need to override these anyway.
Matthias Clasen [Fri, 17 May 2019 21:08:38 +0000 (21:08 +0000)]
Remove gtk_widget_get/set_has_surface
These serve no purpose anymore - widgets don't
have surfaces, unless they're a GtkNative.
Matthias Clasen [Wed, 8 May 2019 04:36:59 +0000 (04:36 +0000)]
Add a GdkSurface::parent property
Matthias Clasen [Sun, 5 May 2019 23:53:02 +0000 (23:53 +0000)]
popover: Bring back the beak
Bring back the code that draws an arrow.
Matthias Clasen [Sun, 19 May 2019 02:53:17 +0000 (02:53 +0000)]
x11: Fix handling of frame clock freezes
Now that popups share the frame clock of their
parent, we have to be much more careful about
freezing the clock, since that may stop updates
for another surface.
This commit makes two changes that make the
X11 handling of the frame clock more similar
to the Wayland backend:
- Use gdk_surface_freeze_updates instead of
gdk_surface_freeze_toplevel_updates to avoid
affecting the frame clock
- Bail out early in before_paint/after_paint
if the surface is frozen, to avoid affecting
the frame clock
Together, these two make the X11 popup surface
type work without freezing updates for the toplevel.
Matthias Clasen [Sun, 5 May 2019 22:59:51 +0000 (22:59 +0000)]
gdk: Inherit the frame clock for popups
With separate clocks, the phases are not coordinated,
which messes with GTKs size allocation machinery treating
the entire widget tree as a whole, and causes us to
run into assertion where popups get drawn before they
are allocated.
Matthias Clasen [Sun, 5 May 2019 22:10:16 +0000 (22:10 +0000)]
Add a testcase for size allocation
This triggers a critical warning in gtk_widget_snapshot.
Matthias Clasen [Sat, 4 May 2019 19:06:40 +0000 (19:06 +0000)]
widget: Remove a popover special case
We never run this since GtkPopover has its
own size_allocate, anyway.
Matthias Clasen [Sat, 4 May 2019 18:45:14 +0000 (18:45 +0000)]
text view: Allocate popovers
Matthias Clasen [Sat, 4 May 2019 18:44:51 +0000 (18:44 +0000)]
places sidebar: Allocate popovers
Matthias Clasen [Sat, 4 May 2019 18:43:04 +0000 (18:43 +0000)]
color swatch: Allocate popovers
Matthias Clasen [Sat, 4 May 2019 18:10:12 +0000 (18:10 +0000)]
entry: Allocate popovers
Matthias Clasen [Sat, 4 May 2019 17:14:06 +0000 (17:14 +0000)]
scale button: Allocate popovers
Call gtk_native_check_resize() from size_allocate,
as is required now. This gets volume buttons closer
to working again (dragging the slider still doesn't
work).
Matthias Clasen [Sat, 4 May 2019 18:01:29 +0000 (18:01 +0000)]
text: Allocate popovers
We need to do the same thing the menu button
does, and call gtk_native_check_resize for
all our popovers
Matthias Clasen [Sat, 4 May 2019 16:21:33 +0000 (16:21 +0000)]
window: Don't inherit cursors across surfaces
I can't think of a case where this is the desired
behavior. So, instead of setting an explicit cursor
on all popups, just stop walking the parents at
surface boundaries.
Matthias Clasen [Sat, 4 May 2019 18:12:45 +0000 (18:12 +0000)]
widget: Optimize resize propagation
When a GtkNative widget is marked as resize_needed,
we need a current position for its parent and we need
the parent to be allocated (so we can position our
surface), but we don't need the parent to be marked
as resize_needed, since the parent size is entirely
independent of the popup size.
Matthias Clasen [Sat, 4 May 2019 18:15:03 +0000 (18:15 +0000)]
widget: Improve warning messages
When we print warnings about a widget, using
gtk_widget_get_name() is slightly better than
G_OBJECT_TYPE_NAME(), since it will give us
the widgets unique name when available.
Matthias Clasen [Thu, 2 May 2019 21:43:38 +0000 (17:43 -0400)]
Add gdk_surface_get_parent back
The api is the same, the parent is different.
This now returns the parent of popup surfaces.
Alexander Larsson [Tue, 23 Apr 2019 14:29:48 +0000 (16:29 +0200)]
surface: Remove gdk_surface_set/merge_child_input_shapes()
These are useless now that we don't have child surfaces
Alexander Larsson [Tue, 23 Apr 2019 14:29:33 +0000 (16:29 +0200)]
surface: Remove old debug code
Matthias Clasen [Mon, 22 Apr 2019 21:33:26 +0000 (21:33 +0000)]
popover: Use GdkSurface::autohide
The new api is made for this case.
Matthias Clasen [Mon, 22 Apr 2019 21:31:33 +0000 (21:31 +0000)]
surface: Add an autohide property
This api is meant to mimic xdg-popover.grab - we
show the surface, and dismiss it when we get events
on other surfaces. For foreign surfaces, the compositor
handles that for us; for our own, we check outselves
before delivering events to GTK.
Matthias Clasen [Mon, 22 Apr 2019 20:27:08 +0000 (20:27 +0000)]
broadway: Track popups
This is more or less a 1:1 copy of the X11 code.
Matthias Clasen [Mon, 22 Apr 2019 15:22:33 +0000 (15:22 +0000)]
x11: Implement popup surfaces
Make them use o-r windows, and move
with their parent.
We do a sort-of ok job on stacking order
here - whenever the parent window gets a
ConfigureNotify, we just restack all popups
directly on top of their parent. This is good
enough to keep popups on top of their parent
while we drag it around, and it gets the popup
to disappear when raising another window on
top of the parent.
Matthias Clasen [Mon, 22 Apr 2019 15:21:45 +0000 (15:21 +0000)]
wayland: Use popup parents
Make the Wayland move-to-rect implementation
use popup parents.